"""
1. 函数的定义语法
"""

# 定义一个函数，输出相关信息
def say_hi():
    print("Hi 我是黑马程序员，学Python来黑马")

# 调用函数，让定义的函数开始工作
say_hi()

# 空函数
# pass可以用来作为占位符，比如现在还没想好怎么写函数的代码，就可以先放一个pass
def nop():
    pass

"""
2. 演示函数使用参数
"""
# 定义2数相加的函数，通过参数接收被计算的2个数字
def add(x, y, z):
    result = x + y + z
    print(f"{x} + {y} + {z}的计算结果是：{result}")

# 调用函数，传入被计算的2个数字
add(5, 6, 7)


"""
3. 演示：定义函数返回值的语法格式
"""
# 定义一个函数，完成2数相加功能
def add(a, b):
    result = a + b
    # 通过返回值，将相加的结果返回给调用者
    return result
    # 返回结果后，还想输出一句话
    print("我完事了")


# 函数的返回值，可以通过变量去接收
r = add(5, 6)
print(r)

"""
4. 演示特殊字面量：None
    无return语句的函数返回值
"""

# 无return语句的函数返回值
def say_hi():
    print("你好呀")

result = say_hi()
print(f"无返回值函数，返回的内容是：{result}")
print(f"无返回值函数，返回的内容类型是：{type(result)}")

# 主动返回None的函数
def say_hi2():
    print("你好呀")
    return None

result = say_hi2()
print(f"无返回值函数，返回的内容是：{result}")
print(f"无返回值函数，返回的内容类型是：{type(result)}")

# None用于if判断
def check_age(age):
    if age > 18:
        return "SUCCESS"
    else:
        return None

result = check_age(16)
if not result:
    # 进入if表示result是None值 也就是False
    print("未成年，不可以进入")


# None用于声明无初始内容的变量
name = None


"""
5. 演示函数的多返回值示例
"""

# 演示使用多个变量，接收多个返回值
def test_return():
    return 1, "hello", True

x, y, z = test_return()
print(x)
print(y)
print(z)


"""
6. lambda匿名函数
    匿名函数lambda x: x * x
    关键字lambda表示匿名函数，冒号前面的x表示函数参数
    匿名函数有个限制，就是只能有一个表达式，不用写return，返回值就是该表达式的结果。
"""

# 定义一个函数，接受其它函数输入
def test_func(compute):
    result = compute(1, 2)
    print(f"结果是:{result}")

# 通过lambda匿名函数的形式，将匿名函数作为参数传入
def add(x, y):
    return x + y

test_func(add)
test_func(lambda x, y: x + y)
